From 9b2cdc1e477cd7ba129a88708725552c9aa6f65a Mon Sep 17 00:00:00 2001 From: =?utf8?q?S=C3=A9bastien=20Villemot?= Date: Tue, 21 Apr 2020 12:21:34 +0100 Subject: [PATCH] Julia requires SSE2 on i386 Bug: https://github.com/JuliaLang/julia/issues/7185 Forwarded: no Last-Update: 2015-11-01 This patch adds an explicit error message if the CPU does not support SSE2. The CPU features are queried using the x86 CPUID opcode. The wrapper function __get_cpuid() is provided by GCC and Clang. See for the list of supported CPU extension flags. Last-Update: 2015-11-01 Gbp-Pq: Name require-sse2-on-i386.patch --- src/codegen.cpp | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/codegen.cpp b/src/codegen.cpp index 6b0dce9..761f5ba 100644 --- a/src/codegen.cpp +++ b/src/codegen.cpp @@ -18,6 +18,9 @@ #endif #include +#ifdef __i386__ +#include +#endif #include #include #include @@ -7765,6 +7768,15 @@ static void init_julia_llvm_env(Module *m) extern "C" void *jl_init_llvm(void) { +#ifdef __i386__ + unsigned int eax = 0, ebx = 0, ecx = 0, edx = 0; + __get_cpuid(1, &eax, &ebx, &ecx, &edx); + if (!(edx & bit_SSE2)) { + fprintf(stderr, "Your processor does not have SSE2 extension, which is required by Julia. Exiting.\n"); + exit(EXIT_FAILURE); + } +#endif + const char *const argv_tailmerge[] = {"", "-enable-tail-merge=0"}; // NOO TOUCHIE; NO TOUCH! See #922 cl::ParseCommandLineOptions(sizeof(argv_tailmerge)/sizeof(argv_tailmerge[0]), argv_tailmerge, "disable-tail-merge\n"); #if defined(_OS_WINDOWS_) && defined(_CPU_X86_64_) -- 2.30.2